package com.bjf.util;

import org.apache.log4j.Logger;

import com.bjf.db.dao.bean.Page;

public class PageUtil {
private static final Logger logger = Logger.getLogger(PageUtil.class); 
    
    /** 
     * Use the origin page to create a new page 
     * @param page 
     * @param totalRecords 
     * @return 
     */ 
    public static Page createPage(Page page, int totalRecords){ 
        return createPage(page.getEveryPage(), page.getCurrentPage(), totalRecords); 
    } 
    
    /**  
     * the basic page utils not including exception handler 
     * @param everyPage 
     * @param currentPage 
     * @param totalRecords 
     * @return page 
     */ 
    public static Page createPage(int everyPage, int currentPage, int totalRecords){ 
        everyPage = getEveryPage(everyPage); 
        currentPage = getCurrentPage(currentPage); 
        int beginIndex = getBeginIndex(everyPage, currentPage); 
        int totalPage = getTotalPage(everyPage, totalRecords); 
        boolean hasNextPage = hasNextPage(currentPage, totalPage); 
        boolean hasPrePage = hasPrePage(currentPage); 
        
        return new Page(hasPrePage, hasNextPage,  
                                everyPage, totalPage, totalRecords,
                                currentPage, beginIndex); 
    }
    
    private static int getEveryPage(int everyPage){ 
        return everyPage == 0 ? 10 : everyPage; 
    } 
    
    private static int getCurrentPage(int currentPage){ 
        return currentPage == 0 ? 1 : currentPage; 
    } 
    
    private static int getBeginIndex(int everyPage, int currentPage){ 
        return (currentPage - 1) * everyPage; 
    } 
        
    private static int getTotalPage(int everyPage, int totalRecords){ 
        int totalPage = 0; 
                
        if(totalRecords % everyPage == 0) 
            totalPage = totalRecords / everyPage; 
        else 
            totalPage = totalRecords / everyPage + 1 ; 
                
        return totalPage; 
    } 
    
    private static boolean hasPrePage(int currentPage){ 
        return currentPage == 1 ? false : true; 
    } 
    
    private static boolean hasNextPage(int currentPage, int totalPage){ 
        return currentPage == totalPage || totalPage == 0 ? false : true; 
    } 

}
